還記得很久以前寫過一篇 python 開發環境嗎~
之前忘記介紹 pipenv 的使用方法了所以現在趕快來補一篇XD
只要在Pipfile
寫好少量的抽象依賴(我要安裝什麼套件),就能自動在 Pipfile.lock
產生實體依賴(版本、建立時間...),因此有版本發生問題時就可以在Pipfile.lock
手動更改部分套件的版本。
pip3 install pipx
pipx install pipenv
安裝套件
pipenv install
`pipenv uninstall`
`pipenv run`
`pipenv lock`
`pipenv shell`
pipenv graph
根據PEP 508檢查安全性風險
pipenv check
```
pipenv --three #python 3
pipenv --two #python 2
pipenv --python 3.6 #安裝指定的 python 版本
```
刪除虛擬環境
pipenv --rm
執行pipenv install
時,如果此專案本身有包含 requirement.txt 時,裏面的套件版本訊息將會自動導入 Pipfile 並執行安裝。
或是加上參數 -r
並加上後面的文件路徑 $ pipenv install -r path/to/requirements.txt
從 Pipfile 和 Pipfile.lock 文件來產生 requirements.txt
$ pipenv lock -r
區分 development 和 production 階段
pipenv install django #production
pipenv install flask --dev #development
$ pipenv install requests==2.13.0
將自動更新到 Pipfile 文件
預設情況虛擬環境聚集在 /home/$username/.local/share/virtualenvs
,因此如果要更換虛擬環境儲存位置的話
固定在專案的根目錄建立 .venv
在你的.bashrc/.zshrc
(或任何shell的設定檔)加上
export PIPENV_VENV_IN_PROJECT=1
透過環境變數 WORKON_HOME
告訴 pipenv 你的虛擬環境應該存在哪裏
export WORKON_HOME=~/.venvs
當需要建立環境變數時,可以在專案根目錄底下建立 .env
,當執行 pipenv run
或 $ pipenv shell
會自動讀取
pipenv 預設從專案根目錄尋找 .env
,因此也可以設定 PIPENV_DOTENV_LOCATION
來更改位置
如果不想要 pipenv 讀取 .env
,把 PIPENV_DONT_USE_PYENV
設爲 1
$ cat .env
SoraAoi=GOOD
$ pipenv run python
Loading .env environment variables…
Python 3.7.3 (default, Apr 13 2019, 13:33:57)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.environ['SoraAoi']
'GOOD'
.env 如果包含隱私資訊,切忌提交到版本控制系統ㄛ
$ pipenv open pandas
$> which python3`
~/.local/bin/python3
$>pipenv --python $(which python3)
就會開始在 .local
底下使用自己編譯的 python 版本建立 Pipfile
Pipfile.lock
來建立虛擬環境
進去專案目錄
pipenv install
這時會看到Pipfile
還有Pipfile.lock
裝套件時 pipenv install packages
進去虛擬環境 pipenv shell
退出虛擬環境 exit
切忌不能用`deactivate
否則會出現
Shell for UNKNOWN_VIRTUAL_ENVIRONMENT already activated.
No action taken to avoid nested environments.
在虛擬環境下執行腳本pipenv run python xxx.py
Pipfile.lock
的時間過久可靠解法
--
跳過 locking 階段,直接下載套件
加入參數 --skip-lock
把 PIPENV_SKIP_LOCK
設爲 1
install
還有 uninstall
指令改變專案路徑會破壞原本預設的 mapping ,pipenv將會和專案的虛擬環境一刀兩斷,因此在專案目錄下新建虛擬環境時,你的.bashrc/.zshrc
(或任何shell的設定檔)應該要加上export PIPENV_VENV_IN_PROJECT=1
來避免因為路徑改變而產生任何問題。
參考這篇issue
https://docs.pipenv.org/
https://crazygit.wiseturtles.com/2018/01/08/pipenv-tour/
https://medium.com/@johnnyellisjohnny/pipenv%E6%8C%87%E4%BB%A4%E5%A4%A7%E5%85%A8-6e4415cc8a15
https://segmentfault.com/a/1190000015143431#articleHeader11
https://blog.aweimeow.tw/use-pyenv-pipenv-to-archieve-clean-environment/
https://datagrok.org/python/activate/
https://pipenv.readthedocs.io/en/latest/
https://speakerdeck.com/uranusjr/zhe-yang-de-kai-fa-huan-jing-mei-wen-ti-ma